Производные Sw(u,v)Sw(u,v) вычисляются по формулам (3.17) - (3.24). Выведем теперь формулы для производных S(u,v)S(u,v) с точки зрения тех Sw(u,v)Sw(u,v). Пусть
S(u,v)=w(u,v)S(u,v)w(u,v)=A(u,v)w(u,v)S(u,v)=w(u,v)S(u,v)w(u,v)=A(u,v)w(u,v)
где A(u,v)A(u,v) является числителем S(u,v)S(u,v) ( уравнение [4.11]). ЗатемSα(u,v)=Aα(u,v)-wα(u,v)S(u,v)w(u,v)Sα(u,v)=Aα(u,v)−wα(u,v)S(u,v)w(u,v)(4.19)
где αα обозначает либо uu или vv.В целом
A(k,l)=[(wS)k]l=(k∑i=0(ki)w(i,0)S(k-i,0))l=k∑i=0(ki)l∑j=0(lj)w(i,j)S(k-i,l-j)A(k,l)=[(wS)k]l=(k∑i=0(ki)w(i,0)S(k−i,0))l=k∑i=0(ki)l∑j=0(lj)w(i,j)S(k−i,l−j) =w(0,0)S(k,l)+k∑i=1(ki)w(i,0)S(k-i,l)+l∑j=1(lj)w(0,j)S(k,l-j)=w(0,0)S(k,l)+k∑i=1(ki)w(i,0)S(k−i,l)+l∑j=1(lj)w(0,j)S(k,l−j) +k∑i=1(ki)l∑j=1(lj)w(i,j)S(k-i,l-j)+k∑i=1(ki)l∑j=1(lj)w(i,j)S(k−i,l−j)
и отсюда следует, чтоS(k,l)=1w(A(k,l)-k∑i=1(ki)w(i,0)S(k-i,l)-l∑j=1(lj)w(0,j)S(k,l-j)S(k,l)=1w(A(k,l)−k∑i=1(ki)w(i,0)S(k−i,l)−l∑j=1(lj)w(0,j)S(k,l−j) -k∑i=1(ki)l∑j=1(lj)w(i,j)S(k-i,l-j))−k∑i=1(ki)l∑j=1(lj)w(i,j)S(k−i,l−j))(4.20)
Из уравнения (4.20), получаемSuv=Auv-wuvS-wuSv-wvSuwSuv=Auv−wuvS−wuSv−wvSuw(4.21)
Suu=Auu-2wuSu-wuuSwSuu=Auu−2wuSu−wuuSw(4.22)
Svv=Avv-2wvSv-wvvSwSvv=Avv−2wvSv−wvvSw(4.23)
Из уравнений (3.24), (4.19) и (4.20)Su(0,0)=pup+1w1,0w0,0(P1,0-P0,0)Su(0,0)=pup+1w1,0w0,0(P1,0−P0,0)(4.24)
Sv(0,0)=qvq+1w0,1w0,0(P0,1-P0,0)Sv(0,0)=qvq+1w0,1w0,0(P0,1−P0,0)(4.25)
Suv(0,0)=pqw0,0up+1vq+1(w1,1P1,1-w1,0w0,1w0,0(P1,0-P0,1)Suv(0,0)=pqw0,0up+1vq+1(w1,1P1,1−w1,0w0,1w0,0(P1,0−P0,1) +(2w1,0w0,1w0,0-w1,1)P0,0)+(2w1,0w0,1w0,0−w1,1)P0,0)(4.26)
Рисунок 4.13 показывает, частные производные первого и второго порядка NURBS поверхности. Первые производные уменьшены на 1⁄2, а вторые производные уменьшены на 1⁄3.Рисунок 4.13. Частные производные первого и второго порядка бикубической поверхности NURBS, вычисленные при u=3⁄4 и v=1⁄4.
Теперь предположим, что (u,v) фиксированы, и что все производные A(k,l), w(k,l) для k,l≥0 и 0≤k+l≤d, были вычислены и загружаются в массивы Aders и wders, соответственно. Алгоритм A4.4 вычисляет точку S(u,v) и производные S(k,l)(u,v), 0≤k+l≤d. Bin[][] содержит предварительно вычисленные биномиальные коэффициенты.
RatSurfaceDerivs(Aders,wders,d,SKL) { /* Вычисляем производные S(u,v) */ /* Вход: Aders,wders,d */ /* Выход: SKL */ for (k=0; k<=d; k++) for (l=0; l<=d-k; l++) { v = Aders[k][l]; for (j=1; j<=l; j++) v = v - Bin[l][j]*wders[0][j]*SKL[k][l-j]; for (i=1; i<=k; i++) { v = v - Bin[k][i]*wders[i][0]*SKL[k-i][l]; v2 = 0.0; for (j=1; j<=l; j++) v2 = v2 + Bin[l][j]*wders[i][j]*SKL[k-i][l-j]; v = v - Bin[k][i]*v2; } SKL[k][l] = v/wders[0][0]; } }
Упражнения
Sw(12,12)=14(Pw0,0+Pw0,1+Pw1,0+Pw1,1)=(1,12,94,54)
Вычислите Su(1⁄2,1⁄2), Sv(1⁄2,1⁄2),Suv(1⁄2,1⁄2),Suu(1⁄2,1⁄2).